package com.xjl.javacore.code.finalx;

import java.util.ArrayList;
import java.util.List;

/**
 * fnal、 fnally、 fnalize有什么不同（验证）
 * 区别
 *
 * final(是不使用缓存)可以用来修饰类、方法、变量，分别有不同的意义， fnal修饰的class代表不可以继承扩展， fnal的变量是不可以修改的，而fnal的方法也是不可以重写的（override）。
 finally（确定被执行）则是Java保证重点代码一定要被执行的一种机制。我们可以使用try-fnally或者try-catch-fnally来进行类似关闭JDBC连接、保证unlock锁等动作。
 finalize（收集资源）是基础类java.lang.Object的一个方法，它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。 fnalize机制现在已经不推荐使用，并且在JDK 9开始被标记
 为deprecated。
 * 明确的代码语义
 * @author xiaojinlu1990@163.com
 * date 2020-01-17
 */
public class FinalXExample {
    public static void main(String[] args) {

    }

    public void finalx1() {
        try {

        } finally {

        }
    }
    /**
     * fnal不是immutable！
     * method:
     * @author xiaojinlu
     * @data
     *
     * @return
     */
    public void finalx3() {
        final List<String> srLis = new ArrayList<>();
        srLis.add("Hello");
        srLis.add("world");
       // List<String> unmodifableStrLis = List.of("hello", "world");  jdk 1.9属性
        List<String> unmodifableStrLis = new ArrayList<>();
        unmodifableStrLis.add("again");
    }
        /**
         *
         * fanlly 不会被执行的情况
         */
        public static void exmaple1() {
            //1. try-cach 异常退出。
            try{
                System.exit(1);
            }finally{
                System.out.printf("print");
            }
            //2. 无限循环
            try{
                while(true){
                    System.out.printf("print");
                }
            } finally {
                System.out.printf("print");
            }
        }


}
